import { NextRequest, NextResponse } from 'next/server';
import UserModel, { UserRegisterData } from '@/models/user';

export async function POST(request: NextRequest) {
  try {
    console.log('注册API请求开始处理');
    const body = await request.json();
    const { username, password, email } = body as UserRegisterData;
    
    console.log(`尝试注册用户: ${username}, 邮箱: ${email}`);
    
    // 验证必填字段
    if (!username || !password || !email) {
      console.log('注册失败: 信息不完整');
      return NextResponse.json(
        { error: '用户名、密码和邮箱不能为空' },
        { status: 400 }
      );
    }
    
    // 验证用户名长度
    if (username.length < 3 || username.length > 20) {
      console.log('注册失败: 用户名长度不符合要求');
      return NextResponse.json(
        { error: '用户名长度必须在3-20个字符之间' },
        { status: 400 }
      );
    }
    
    // 验证密码强度
    if (password.length < 6) {
      console.log('注册失败: 密码长度不符合要求');
      return NextResponse.json(
        { error: '密码长度至少为6个字符' },
        { status: 400 }
      );
    }
    
    // 验证邮箱格式
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if (!emailRegex.test(email)) {
      console.log('注册失败: 邮箱格式不正确');
      return NextResponse.json(
        { error: '邮箱格式不正确' },
        { status: 400 }
      );
    }
    
    // 检查用户名是否已存在
    try {
      const existingUserByUsername = await UserModel.findByUsername(username);
      if (existingUserByUsername) {
        console.log('注册失败: 用户名已存在');
        return NextResponse.json(
          { error: '用户名已被使用' },
          { status: 409 }
        );
      }
    } catch (dbError: any) {
      console.error('检查用户名存在性时数据库错误:', dbError);
      return NextResponse.json(
        { 
          error: '数据库查询失败', 
          details: dbError.message,
          code: dbError.code || 'UNKNOWN_ERROR'
        },
        { status: 500 }
      );
    }
    
    // 检查邮箱是否已存在
    try {
      const existingUserByEmail = await UserModel.findByEmail(email);
      if (existingUserByEmail) {
        console.log('注册失败: 邮箱已被注册');
        return NextResponse.json(
          { error: '邮箱已被注册' },
          { status: 409 }
        );
      }
    } catch (dbError: any) {
      console.error('检查邮箱存在性时数据库错误:', dbError);
      return NextResponse.json(
        { 
          error: '数据库查询失败', 
          details: dbError.message,
          code: dbError.code || 'UNKNOWN_ERROR'
        },
        { status: 500 }
      );
    }
    
    // 创建新用户
    let userId;
    try {
      console.log('开始创建用户');
      userId = await UserModel.create({ username, password, email });
      console.log(`用户创建成功, ID: ${userId}`);
    } catch (createError: any) {
      console.error('创建用户时数据库错误:', createError);
      return NextResponse.json(
        { 
          error: '创建用户失败', 
          details: createError.message,
          code: createError.code || 'UNKNOWN_ERROR'
        },
        { status: 500 }
      );
    }
    
    console.log('注册成功');
    return NextResponse.json(
      { message: '注册成功', userId },
      { status: 201 }
    );
    
  } catch (error: any) {
    console.error('注册处理过程中发生错误:', error);
    return NextResponse.json(
      { 
        error: '服务器错误，请稍后再试', 
        details: error.message,
        stack: process.env.NODE_ENV === 'development' ? error.stack : undefined
      },
      { status: 500 }
    );
  }
} 